Skip to content

Add Isafdar navigation obstacles and Lletya content - #1237

Open
HarleyGilpin wants to merge 4 commits into
GregHib:mainfrom
HarleyGilpin:area/isafdar
Open

Add Isafdar navigation obstacles and Lletya content#1237
HarleyGilpin wants to merge 4 commits into
GregHib:mainfrom
HarleyGilpin:area/isafdar

Conversation

@HarleyGilpin

Copy link
Copy Markdown
Contributor

Adds the interactable objects needed to navigate Isafdar and the missing Lletya content, plus a crystal bow combat fix found while testing.

Isafdar navigation

  • Dense forest passages (3937-3939, 3998/3999) - squeeze through with rotation-aware movement; the two Elf Camp passages require 56 Agility (data-driven level param). Players line up with the tile nearest the passage centre before squeezing through.
  • Tripwire (3921) / sticks trap (3922) - step-over with an agility success roll; failure deals damage with authentic messages.
  • Leaf traps (3923-3925) - jump across on click; failing the roll or walking onto the trap tile drops the player into the pit below (spikes damage), with the protruding rocks (3927) to climb back out. All four trap sites wired to their pits.
  • Log balances (3931/3932/3933) - 45 Agility, 7.5 xp. Approach is interruptible by walking away; the crossing itself is done at walk speed with the rope balance render emote.
  • Elven Overpass rocks (9296/9297) - three cliffside shortcuts at 59/68/85 Agility.
  • Lletya tree entrance (8742) - gated on Roving Elves.
  • Arandar heavy gates (3944/3945), Underground Pass door pass-through (4006/36000) and Poison Waste caves/sewer ladders (until the full dungeon content exists).

Lletya

  • Teleport crystal - Activate teleports to Lletya using the existing charge degrade chain, with degradation messages.
  • Eluned - re-enchants uncharged crystals for 750 coins, decreasing by 150 per recharge to a floor of 150 (persisted per player).
  • Islwyn - sells new crystal bows/shields for 900,000 and attunes crystal seeds for 900,000 decreasing by 180,000 to a floor of 180,000 (persisted per player).
  • Shopkeeper dialogues (Eudav, Oronwen, Dalldav, Gethin) opening their existing shops, and flavour dialogue for Goreu, Ysgawyn, Mawrth, Arvel, Kelyn, Eoin, Iona and Gwir.
  • Elf musician (8723) no longer turns to face players (interacts = false), staying locked facing south.

Fixes

  • Crystal bow dropped itself as ammo: new_crystal_bow didn't match the startsWith("crystal_bow") check in ammo/Ammo.kt, so firing it removed the bow from the weapon slot and dropped it at the target like a thrown weapon. Now maps to the same no-ammo handling as the rest of the chain.
  • objectApproach supports arrive = false (mirroring objectOperate): approach handlers can now run without waiting for the already-queued route to finish. Needed because the log balance's cache reach tile is south of the log - without this the player always detoured a tile south before crossing.

Notes

  • Trap fail damages and success rates are placeholder values flagged with TODOs; exact 2011 numbers are unverified.
  • Which pit belongs to the west/centre/north leaf traps is a best guess (the south trap's pit is verified); flagged in code.
  • Quest gates use questCompleted("roving_elves"), relying on quests.requirements.skipMissing until the elf quests are implemented.

Testing

  • IsafdarTest (17 tests): every obstacle type, level gates, trap failure damage, pit fall/climb-out, log pathing regression (7 start positions asserting no south detour), approach interruption.
  • LletyaTest (6 tests): teleport crystal charge chain, Eluned/Islwyn price ladders and persistence, shopkeeper dialogue opening shops.
  • CrystalBowTest: bow stays equipped and degrades correctly when fired.
  • Full :game: and :engine: suites pass.

Isafdar:
- Dense forest passages (56 Agility for the two Elf Camp entrances),
  lining up with the passage centre before squeezing through
- Tripwire and sticks traps with agility roll, fail damage and messages
- Leaf traps: jump over, fall into the pit below on failure or when
  walking onto the trap tile, climb out via the protruding rocks
- Log balances (45 Agility) at the hunting grounds and Arandar,
  interruptible while approaching, walked at walk speed while crossing
- Elven Overpass cliffside rocks (59/68/85 Agility)
- Arandar heavy gates, Underground Pass door pass-through and
  Poison Waste cave entrances, exits and sewer ladders

Lletya:
- Teleport crystal Activate with charge degradation
- Eluned recharges teleport crystals (750 coins, decreasing to 150)
- Islwyn sells and attunes crystal bows and shields (900k, decreasing)
- Shopkeeper and resident dialogues
- Elf musician locked facing south

Fixes:
- New crystal bow no longer dropped at the target as ammo when fired
- objectApproach supports arrive = false to skip waiting for the
  pending route, matching objectOperate
@Ebp90

Ebp90 commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

I can convert Regicide, Roving Elves and MEP1 to compliment this at some point.

@GregHib GregHib left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dense forests:

  • anims don't seem to be correct
  • if you stand to the side of one and enter you can clip yourself into the forest on the other side
  • Anim finishes too early and force walk slides the last tick

Sticks:

  • Can move diagonal
  • Anim finishing too early and slides at end
  • You can step onto them without setting them off

Tripwire:

  • A little janky with teleports/anims but generally okay

Leaf traps:

  • Also diagonal movement issue
  • Doesn't trigger when walking over without interaction
  • Also slide at end of movement

Log balance:

  • Run orb disables when walking across (see other log balances)

- Dense forest: correct animations per passage type (839 climb-over,
  749 double squeeze, 1237 side squeeze) with sounds, 94cs move with
  30cs start delay to stop the end-of-move slide, and a collision-aware
  line-up walk so entering from the side can no longer clip through
- Tripwire: step-over is now a lined-up single-tile exact move over the
  wire; failing fires the flanking arrow launcher animations and
  projectiles
- Sticks trap: crossing walks along the trap at walk speed; failing
  springs the trap and flings the player off in the direction fixed by
  the trap's rotation, and walking onto the trap without interacting
  now sets it off
- Leaf traps: trigger areas cover the full 3x3 leaf patches so walking
  (or cutting diagonally) over any leaf tile drops the player into the
  pit with the stumble and getup animations; jumps line up with the
  trap first and use the proper timings; centre pit tile corrected
- Log balance: no longer toggles the run setting while crossing (run
  orb stays lit) and plays the balance sound each step
@HarleyGilpin

HarleyGilpin commented Sep 5, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the review in bf7c86f, using a packet capture from OSRS as reference:

Dense forests: animations were wrong for most ids: 3937/3999 use 839 (climb-over), 3938/3998 use 749 (double squeeze, cleared after the move), 3939 uses 1237 (side squeeze), each with their forest sound. The exact move is now 94cs with a 30cs start delay which removes the early anim finish/slide. The line-up walk is now collision-aware (walkToDelay instead of a forced walk-over) and aborts if the lane tile isn't reached, so entering from the side can't clip through anymore.

Tripwire: reworked to the captured shape: walk onto the near wire tile, single-tile exact move over the wire with anim 1236, then step off. Failing now animates the flanking arrow launchers (3920) and fires arrow projectiles at the player.

Sticks: crossing walks straight along the trap at walk speed (lined up first, so no diagonals). Failing springs the trap (obj anim + stumble-back 846) and flings the player off in the fixed direction given by the trap's rotation. Walking onto the trap without interacting now sets it off the same way, with a regression test.

Leaf traps: trigger areas now cover the full 3x3 leaf patches, so walking or cutting a diagonal over any leaf tile drops the player into the pit (stumble 764 → getup 534 + "Ouch!"), with a test. Jumps line up with the trap centre first and use the captured timings, which also fixes the end slide. Scripted crossings suppress the walk-on trigger via a var.

Log balance: the run setting is no longer touched; crossing relies on force-walk like the other log balances so the run orb stays lit, and the balance sound plays each step.

One deviation: in our map data the tripwire midline carries wall flags, so walking through the wire without interacting is collision-blocked, the capture's walk-through arrow volley can't trigger and I left that walk-on handler out rather than firing it from the approach tile.

Tag the tripwire tiles as border areas so a walk click at the wire
force-walks the player through the wall-flagged midline at walk speed,
with the arrow launcher volley, damage and poison firing on the way
through. Interacted step-overs suppress the volley and roll as before.
@HarleyGilpin

Copy link
Copy Markdown
Contributor Author

Follow-up in e4b6395: the walk-through deviation from the previous comment is resolved — the tripwire tiles are now tagged as border areas, so walking at the wire crosses it the same way the border guard gates work (forced walk through the wall-flagged midline), with the arrow volley, damage and poison firing on the way through. Interacted step-overs still suppress the volley and roll as before.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants